QTimer
QTimer : 計時器,可以設置特定的時間,並在每個時間間隔到達時執行某些任務。例如,一些廣告網站會使用類似的機制,每隔幾秒自動更換展示的圖片。
QTimer 信號
-
timeout.connect(function)
: 當設定的時間到達後,會觸發該信號。
QTimer 設定開始和停止
-
start(msec)
: 啟動計時器,並設定時間間隔,以毫秒為單位。如果設置為一秒,計時器將每隔一秒自動觸發一次。下面範例是每過一秒,會觸發信號,會列印出 「經過了一秒」。
from PySide6.QtWidgets import QMainWindow , QApplication, QWidget
from PySide6.QtCore import QTimer
class MyWindow(QWidget):
def __init__(self):
super().__init__()
time = QTimer(self)
time.start(1000)
time.timeout.connect(lambda: print("經過了一秒"))
if __name__ == "__main__":
app = QApplication([])
window = MyWindow()
window.show()
app.exec()
-
stop()
: 暫停計時器,當計時器停止後,timeout() 信號將不再觸發。。下面範例是當按下按鈕後,會停止列印文字。
from PySide6.QtWidgets import QMainWindow , QApplication, QWidget , QPushButton
from PySide6.QtCore import QTimer
class MyWindow(QWidget):
def __init__(self):
super().__init__()
# 設定計時器
time = QTimer(self)
time.timeout.connect(lambda: print("經過了一秒")) #每過一秒會列印文字
time.start(1000)
#設定按鈕
btn = QPushButton("按鈕",self)
btn.clicked.connect(lambda: time.stop()) #當觸發信號時,會停止計時器
if __name__ == "__main__":
app = QApplication([])
window = MyWindow()
window.show()
app.exec()
設定 QTimer 只跑一次
-
setSingleShot(bool)
: 設定計時器是否是單次觸發。下面範例是經過一秒後,就不會列印了。
from PySide6.QtWidgets import QMainWindow , QApplication, QWidget , QPushButton
from PySide6.QtCore import QTimer
class MyWindow(QWidget):
def __init__(self):
super().__init__()
# 設定計時器
time = QTimer(self)
time.timeout.connect(lambda: print("經過了一秒")) #每過一秒會列印文字
time.start(1000)
# 設定只跑一次
time.setSingleShot(True)
if __name__ == "__main__":
app = QApplication([])
window = MyWindow()
window.show()
app.exec()
-
singleShot(msec,function)
: 設定計時器在指定的毫秒後執行槽函數,只執行一次,不會重複觸發。下面範例是透過 singleShot(msec,function)
一秒過後,列印文字,之後就不會有任何功能。
from PySide6.QtWidgets import QMainWindow , QApplication, QWidget
from PySide6.QtCore import QTimer
class MyWindow(QWidget):
def __init__(self):
super().__init__()
# 設定計時器
time = QTimer(self)
# 設定只跑一次
time.singleShot(1000, lambda: print("經過了一秒"))
if __name__ == "__main__":
app = QApplication([])
window = MyWindow()
window.show()
app.exec()
QTimer 常用的功能
-
setInterval(msce)
: 設定觸發計時器的間隔時間,假如我設了五秒鐘,他就會每隔五秒後,開始執行計時器。下面範例是間隔一秒後,會列印文字,因為 start()
是設置空的。
from PySide6.QtWidgets import QMainWindow , QApplication, QWidget
from PySide6.QtCore import QTimer
class MyWindow(QWidget):
def __init__(self):
super().__init__()
# 設定計時器
time = QTimer(self)
time.timeout.connect(lambda: print("經過了一秒")) #每過一秒會列印文字
time.start()
# 設定間隔
time.setInterval(1000)
if __name__ == "__main__":
app = QApplication([])
window = MyWindow()
window.show()
app.exec()
-
isActive()
: 會回傳計時器是否正在運行。下面範例通過 QLabel 確定是否有在運行計時器。
from PySide6.QtWidgets import QMainWindow , QApplication, QWidget , QLabel , QPushButton
from PySide6.QtCore import QTimer
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.resize(100,100)
# 設定計時器
self.time = QTimer(self)
self.time.timeout.connect(lambda: print("經過了一秒")) #每過一秒會列印文字
self.time.start(1000)
# 設定標籤
self.label = QLabel("計時器狀態",self)
self.label.setText(f'計時器狀態 : {self.time.isActive()}')
#設定按鈕
btn = QPushButton("按鈕",self)
btn.setGeometry(0,20,50,50)
btn.clicked.connect(self.stop) #當觸發信號時,會停止計時器
def stop(self):
self.time.stop()
self.label.setText(f'計時器狀態 : {self.time.isActive()}')
if __name__ == "__main__":
app = QApplication([])
window = MyWindow()
window.show()
app.exec()
總結
功能 |
方法 |
時間到觸發信號 |
timeout.connect(function) |
功能 |
方法 |
開始 |
start(msec) |
停止 |
stop() |
功能 |
方法 |
設定是否單次觸發計時器 |
setSingleShot(bool) |
設定毫秒後,觸發一次槽函數 |
singleShot(msec,function) |
功能 |
方法 |
計時器啟動間隔時間 |
setInterval(msec) |
計時器是否運行 |
isActive() |